// 给定一个数组nums，nums是升序数组经过旋转得到的，但是旋转次数未知，数组中可能存在重复元素,
// 要求找出数组中的最小元素

// 思路：相比上一题，可能会有重复的值，则需要在判断midVal和right的值
// 如果midVal等于arr[right],right需要自减一

// 时间复杂度为Ologn
// 空间复杂度为O1

function findMin(arr) {
    let left = 0
    let right = arr.length - 1
    while (left < right) {
        let mid = Math.floor((right - left) / 2) + left
        if (arr[mid] > arr[right]) {
            left = mid + 1
        } else if (arr[mid] === arr[right]) {
            right--
        } else {
            right = mid
        }
    }
    return left
}

let arr = [3, 4, 5, 1, 1, 2, 2, 3]
console.log(findMin(arr));